/**
 * [1,2,3,4,5,6] => [4,5,6,1,2,3]
 * @param {number[]} nums 
 * 二分搜索实现 logn时间复杂度 
 */
var findMin = function (nums) {
    if (nums.length === 1) {
        return nums[0]
    }

    let left = 0, right = nums.length - 1

    // 判断数组是否被反转了，没有反转直接返回第一个元素
    if (nums[right] > nums[0]) {
        return nums[0]
    }

    while (left < right) {
        let mid = Math.floor(left + (right - left) / 2)

        // 结束的2种情况
        if (nums[mid] > nums[mid + 1]) {
            return nums[mid + 1]
        }
        if (nums[mid - 1] > nums[mid]) {
            return nums[mid]
        }

        // 需要继续二分查找的情况
        if (nums[mid] > nums[left]) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
}